Computerized devices control almost every aspect of our life—from writing documents to controlling traffic lights. However, computerized devices are bug-prone, and thus require a testing phase in which the bugs should be discovered. The testing phase is considered one of the most difficult tasks in designing a computerized device. The cost of not discovering a bug may be enormous, as the consequences of the bug may be disastrous. For example, a bug may cause the injury of a person relying on the designated behavior of the computerized device. Additionally, a bug in hardware or firmware may be expensive to fix, as patching it requires call-back of the computerized device. Hence, many developers of computerized devices invest a substantial portion of the development cycle to discover erroneous behaviors of the computerized device.
During testing phase, developers, QA staff members, and the like test a newly developed hardware design to verify that it operates properly. In some cases, test cases (also referred to simply as “tests”) may be devised to provide stimuli to the component, and enable testing whether its operation is correct (e.g., as expected).
In recent years, multiprocessing architectures wherein two or more processors, often referred to as “cores”, are being employed in concurrent individual execution of instruction sets within a common computing environment, optionally sharing system resources, have become ubiquitous among many computing devices and platforms, whether on enterprise level or within mobile and embedded systems.
As can be readily understood, each additional processor effectively raises the number of calculation operations that can be performed simultaneously, thereby allowing for improved functionality such as for example increased efficiency and speed through parallel computing, or alternatively supporting fail-safe mechanism by exploiting redundant processors for backup purposes.
However, with the growing hardware intricacy, the task of testing a new design once fabricated has become an even more challenging endeavor. Typically, the validation phase entails repeated execution of resource intensive program instructions, utilizing the entire design functionality, for extended periods of time. Such procedure is commonly known as “stress test”, since it explores system performance under extreme conditions. In the context of multiprocessing, a multi-process or multi-threaded stress test program is run on all processors of the hardware design undergoing validation.